home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / lalr.lha / lalr / m2c / LR.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  1KB  |  74 lines

  1. #include "SYSTEM_.h"
  2.  
  3. #ifndef DEFINITION_Automaton
  4. #include "Automaton.h"
  5. #endif
  6.  
  7. #ifndef DEFINITION_Sets
  8. #include "Sets.h"
  9. #endif
  10.  
  11. #ifndef DEFINITION_TokenTab
  12. #include "TokenTab.h"
  13. #endif
  14.  
  15. #ifndef DEFINITION_LR
  16. #include "LR.h"
  17. #endif
  18.  
  19.  
  20. static void ComputeNext ARGS((Automaton_tStateIndex s));
  21.  
  22.  
  23. void LR_ComputeLR
  24. # ifdef __STDC__
  25. ()
  26. # else
  27. ()
  28. # endif
  29. {
  30.   Automaton_tStateIndex s;
  31.  
  32.   s = Automaton_MakeFirstState();
  33.   ComputeNext(s);
  34. }
  35.  
  36. static void ComputeNext
  37. # ifdef __STDC__
  38. (Automaton_tStateIndex s)
  39. # else
  40. (s)
  41. Automaton_tStateIndex s;
  42. # endif
  43. {
  44.   Automaton_tStateIndex t;
  45.   Sets_tSet g;
  46.   TokenTab_Vocabulary v;
  47.   BOOLEAN n;
  48.  
  49.   Sets_MakeSet(&g, (LONGCARD)TokenTab_MAXNonTerm);
  50.   Automaton_GotoSet(s, &g);
  51.   while (!Sets_IsEmpty(g)) {
  52.     v = Sets_Extract(&g);
  53.     t = Automaton_Goto(s, v, &n);
  54.     if (n) {
  55.       ComputeNext(t);
  56.     }
  57.   }
  58.   Sets_ReleaseSet(&g);
  59. }
  60.  
  61. void BEGIN_LR()
  62. {
  63.   static BOOLEAN has_been_called = FALSE;
  64.  
  65.   if (!has_been_called) {
  66.     has_been_called = TRUE;
  67.  
  68.     BEGIN_Automaton();
  69.     BEGIN_Sets();
  70.     BEGIN_TokenTab();
  71.  
  72.   }
  73. }
  74.